﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SGT_ON;
using DevExpress;

public partial class AsignarRepuestos : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnBuscar_Click1(object sender, ImageClickEventArgs e)
    {
        Buscar();
    }
    private void Buscar()
    {
        popBusqueda.ShowOnPageLoad = true;
        gvProductos.DataBind();
    }
    protected void lnkProductoASeleccionar_DataBinding(object sender, EventArgs e)
    {
        string a = e.ToString();
        ((System.Web.UI.WebControls.HyperLink)sender).NavigateUrl += "&IDPre=" + Request.QueryString["IDPre"];
    }
    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {   
        int _stockAUsar;
        int _idProducto;

        if(Request.QueryString["IDPro"] == null)
        {
            args.IsValid = false;
            return;
        }
        else
        {
            int.TryParse(Request.QueryString["IDPro"], out _idProducto);
            if(_idProducto <= 0) 
            {
                args.IsValid = false;
                return;
            }
        }

        _stockAUsar = int.Parse(args.Value);

        StockProducto _producto = StockProducto.CrearStockProducto(_idProducto);
        
        if (_stockAUsar > _producto.Cantidad)
            args.IsValid = false;
        else
            args.IsValid = true;
    }
    protected void btnAsignar_Click(object sender, EventArgs e)
    {
        if (Page.IsValid == false)
            return;

        // si no se ha seleccionado nada, vuelvo(esto de debe verificar antes con el custom validator)
        if (gvElementosSinAsignar.GetSelectedFieldValues("ReponerCantidad").Count == 0)
            return;
        
        decimal _reponerCantidad = (decimal)((System.Collections.Generic.List<object>)gvElementosSinAsignar.GetSelectedFieldValues("ReponerCantidad"))[0];
        int _idElementoSinAsignar = (int)((System.Collections.Generic.List<object>)gvElementosSinAsignar.GetSelectedFieldValues("ID"))[0];

        int _cantidadAAsignar = int.Parse(((TextBox)fvProducto.FindControl("txtCantidadAAsignar")).Text);
        bool _estaEnDeposito = ((DevExpress.Web.ASPxEditors.ASPxCheckBox)fvProducto.FindControl("chkProductoEstaEnDeposito")).Checked; 

        int _idProducto = int.Parse(Request.QueryString["IDPro"]);

        string _userId = HttpContext.Current.User.Identity.Name.ToString();
        SGT_ON.ONEmpleado _empleado = ONEmpleado.ObtenerEmpleadoPorUsuarioID(_userId);

        //creo la asociacion y cargo nuevamente la pagina
        ONPresupuesto.AsignarRepuestoAPresupuesto(_idProducto, _idElementoSinAsignar, _cantidadAAsignar, _estaEnDeposito, _empleado.ApellidoYNombre);

        Response.Redirect("~/AsignarRepuestos.aspx?IDPre=" + Request.QueryString["IDPre"]);
        
    }
    protected void dsProducto_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {

    }
    protected void cvValidarQueSeleccionoUnRepuesto_ServerValidate(object source, ServerValidateEventArgs args)
    {
        DevExpress.Web.Data.WebDataSelection _eleccion = gvElementosSinAsignar.Selection;
        //gvElementosSinAsignar.GetSelectedFieldValues("Item")
    }
    protected void cvRepuestoSinAsignar_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (gvElementosSinAsignar.GetSelectedFieldValues("ReponerCantidad").Count == 0)
            args.IsValid = false;
        else
            args.IsValid = true;
    }
    protected void cvRepuestoSinAsignarMasDeUno_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (gvElementosSinAsignar.GetSelectedFieldValues("ReponerCantidad").Count > 1)
            args.IsValid = false;
        else
            args.IsValid = true;
    }
    protected void gvProductosEnPresupuesto_CustomButtonCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewCustomButtonCallbackEventArgs e)
    {
        if (e.ButtonID == "Liberar")
        {
            string _userId = HttpContext.Current.User.Identity.Name.ToString();
            SGT_ON.ONEmpleado _empleado = ONEmpleado.ObtenerEmpleadoPorUsuarioID(_userId);

            int _idProductoEnPresupuesto = (int)((DevExpress.Web.ASPxGridView.ASPxGridView)sender).GetRowValues(e.VisibleIndex, "ID");
            ONPresupuesto.LiberarRepuestoDePresupuesto(_idProductoEnPresupuesto, _empleado.ApellidoYNombre);
                        
            DevExpress.Web.ASPxClasses.ASPxWebControl.RedirectOnCallback("~/AsignarRepuestos.aspx?IDPre=" + Request.QueryString["IDPre"]);
        }
        if (e.ButtonID == "MarcarComoEntregado")
        {
            int _idProductoEnPresupuesto = (int)((DevExpress.Web.ASPxGridView.ASPxGridView)sender).GetRowValues(e.VisibleIndex, "ID");
            StockProductoEnPresupuesto _productoEnPresupuesto = StockProductoEnPresupuesto.CrearStockProductoEnPresupuesto(_idProductoEnPresupuesto);
            _productoEnPresupuesto.MovimientoAsociado.ProductoEstaEnDeposito = false;
            _productoEnPresupuesto.MovimientoAsociado.Actualizar();
            DevExpress.Web.ASPxClasses.ASPxWebControl.RedirectOnCallback("~/AsignarRepuestos.aspx?IDPre=" + Request.QueryString["IDPre"]);
        }
        if (e.ButtonID == "MarcarComoEstaEnDeposito")
        {
            int _idProductoEnPresupuesto = (int)((DevExpress.Web.ASPxGridView.ASPxGridView)sender).GetRowValues(e.VisibleIndex, "ID");
            StockProductoEnPresupuesto _productoEnPresupuesto = StockProductoEnPresupuesto.CrearStockProductoEnPresupuesto(_idProductoEnPresupuesto);
            _productoEnPresupuesto.MovimientoAsociado.ProductoEstaEnDeposito = true;
            _productoEnPresupuesto.MovimientoAsociado.Actualizar();
            DevExpress.Web.ASPxClasses.ASPxWebControl.RedirectOnCallback("~/AsignarRepuestos.aspx?IDPre=" + Request.QueryString["IDPre"]);
        }
    }
    protected void txtTexto_TextChanged(object sender, EventArgs e)
    {
        Buscar();
    }
    protected void btnEstablecerProductoHaSidoEntregado_Click(object sender, ImageClickEventArgs e)
    {
        ImageButton _boton = sender as ImageButton;

        if (_boton.CommandArgument == "")
            return;

        int _idProductoEnPresupuesto = int.Parse(_boton.CommandArgument);
        SGT_ON.StockProductoEnPresupuesto _productoEnPresupuesto = SGT_ON.StockProductoEnPresupuesto.CrearStockProductoEnPresupuesto(_idProductoEnPresupuesto);

        if ((_productoEnPresupuesto == null)
            || (_productoEnPresupuesto.ID <= 0))
            return;

        if((_productoEnPresupuesto.MovimientoAsociado ==null)
            || (_productoEnPresupuesto.MovimientoAsociado.ID <= 0))
            return;

        _productoEnPresupuesto.MovimientoAsociado.ProductoEstaEnDeposito = false;
        _productoEnPresupuesto.MovimientoAsociado.Actualizar();

        gvProductosEnPresupuesto.DataBind();
    }
    protected void btnEstablecerProductoEstaEnDeposito_Click(object sender, ImageClickEventArgs e)
    {
        ImageButton _boton = sender as ImageButton;

        if (_boton.CommandArgument == "")
            return;

        int _idProductoEnPresupuesto = int.Parse(_boton.CommandArgument);
        SGT_ON.StockProductoEnPresupuesto _productoEnPresupuesto = SGT_ON.StockProductoEnPresupuesto.CrearStockProductoEnPresupuesto(_idProductoEnPresupuesto);

        if ((_productoEnPresupuesto == null)
            || (_productoEnPresupuesto.ID <= 0))
            return;

        if ((_productoEnPresupuesto.MovimientoAsociado == null)
            || (_productoEnPresupuesto.MovimientoAsociado.ID <= 0))
            return;

        _productoEnPresupuesto.MovimientoAsociado.ProductoEstaEnDeposito = true;
        _productoEnPresupuesto.MovimientoAsociado.Actualizar();

        gvProductosEnPresupuesto.DataBind();
    }
}